#include "colas.h"
#include "listas.h"

int main(){

  int sectores=60;
  char opcion,eleccion;
  int retorno;
  
  
  lColas *listadecolas = (lColas *) malloc(sizeof(lColas));
   
  lColas *actual=listadecolas;
   
  cola cola1;
  cola cola2;
  
  crearCola(&cola1);
  crearCola(&cola2);    
  
  cola1.cabeza=NULL;
  cola1.talon=NULL;
  cola2.cabeza=NULL;
  cola2.talon=NULL;
  
  cola *pcola1=&cola1;
  cola *pcola2=&cola2;
  
  addToList((gl *)listadecolas,pcola1);
  addToList((gl *)listadecolas,pcola2);
   
   eleccion='1';
   
   char *dato="Esta es una prueba";
   
  
          
      switch(eleccion){
               
         case '1':
	     
	     printf("\nAgregar \n");
 
            
            printf("\n COLA1 \n");
            agregar(&pcola1->cabeza,&pcola1->talon,dato);
            imprimirCola(pcola1->cabeza);
	    
            break; 
            
         
         
         default:
 
            printf("Ese comando no es valido\n");
            break;
   
      }/*Fin de switch*/
   
   eleccion='1';
    switch(eleccion){
               
         case '1':
         
	     printf("\nAgregar \n");
	    
            
            printf("\n COLA2 \n");
	    
	     agregar(&pcola2->cabeza,&pcola2->talon,dato);
            imprimirCola(pcola2->cabeza);
	
            
            break; 
        
         default:
 
            printf("Ese comando no es valido\n");
            break;
   
      }/*Fin de switch*/
   
   eleccion='1';
    switch(eleccion){
               
         case '1':
         
	     printf("\nAgregar \n");
	    
            
            printf("\n COLA1 \n");
	    
	    agregar(&pcola1->cabeza,&pcola1->talon,dato);
            imprimirCola(pcola1->cabeza);
	
            
            break; 
        
         default:
 
            printf("Ese comando no es valido\n");
            break;
   
      }/*Fin de switch*/
   
   eleccion='1';
    switch(eleccion){
               
         case '1':
         
	     printf("\nAgregar \n");
            
            printf("\n COLA1 \n");
	    
	    agregar(&pcola1->cabeza,&pcola1->talon,dato);
            imprimirCola(pcola1->cabeza);
	
            
            break; 
        
         default:
 
            printf("Ese comando no es valido\n");
            break;
   
      }/*Fin de switch*/
   
   
   
   eleccion='2';
    switch(eleccion){
               
            
         case '2':
         
	     printf("\nRetirar \n");
                
            if(!estaVacia(pcola2->cabeza)){
            
                printf("\n COLA2 \n");
		retirar(&pcola2->cabeza,&pcola2->talon);
		imprimirCola(pcola2->cabeza);           
            
            }
            else{
            
               printf("La cola esta vacia \n");            
            
            }
            
            break;
         
         
         default:
 
            printf("Ese comando no es valido\n");
            break;
   
      }/*Fin de switch*/
   
   
   eleccion='5';
    switch(eleccion){
         
         case '5':
         
            printf("\nBusqueda \n");
	     
            if(!estaVacia(pcola1->cabeza)){
            
               printf("\n COLA1 \n");
               
               retorno=buscarc(pcola1->cabeza,dato);
               
               if(retorno==-1){        
                  printf("Ese dato no se encuentra en la cola\n");   
               }
               else{
                  printf("El dato %s se encuentra en la posicion %i de la cola \n",dato,retorno);      
               }
            }
           
       
         
            break;
            
         
         
         default:
 
            printf("Ese comando no es valido\n");
            break;
   
      }/*Fin de switch*/
   
    imprimirListadeColas(listadecolas);
    
    return 0;

}/*Fin de main*/






char instrucciones(char eleccion){


   printf("\nMenu de opciones \n");
   printf("----------------\n");
   
   printf("1)Agregar a cola \n");
   printf("2)Retirar de Cola \n");
   printf("3)Borrar Cola\n");
   printf("4)Ver longitud de Cola\n");
   printf("5)Buscar en Cola \n");
   printf("6)Añadir cola a lista de colas");
   
    
   /*printf ("\n?: ");
   scanf ("%c", &eleccion);
   getchar(); 
   */
  
   eleccion='1';
   
  return eleccion;
 
} /*Fin de instrucciones*/



void agregar(nodo **ptrS,nodo **ptrS2,char* valor){

   nodo  *ptrNuevo=(nodo *)malloc(sizeof(nodo));
   
   if(ptrNuevo!=NULL){
       
      ptrNuevo->caracter = (char *)malloc(50);
      strcpy(ptrNuevo->caracter,valor);
      ptrNuevo->ptrSgte=NULL;
                    
      
     if(*ptrS==NULL){
         *ptrS=ptrNuevo;
      }
      else{ 
         (*ptrS2)->ptrSgte=ptrNuevo;  
      }
      
       *ptrS2=ptrNuevo;
   
   
   }else{
   
      printf("NO se inserto el elemento pues NO hay memoria dsiponible \n");
   
   }
   
}/*Fin agregar*/

void imprimirCola(nodo *ptrActual){

   if(ptrActual==NULL){
   
      printf("La cola esta vacia\n");
   
   }/*Fin de if*/
   else{
   
        printf("La Cola es: \n");
   
      while(ptrActual!=NULL){
      
         printf("%s->",ptrActual->caracter);
         ptrActual=ptrActual->ptrSgte;
        
      }/*Fin de while*/
      printf("NULL \n");
      
   }/*Fin de else*/
} /*Fin de instrucciones*/


void retirar(nodo **ptrS,nodo **ptrS2){

   nodo *ptrTemp;
   
   ptrTemp=*ptrS;
   *ptrS=(*ptrS)->ptrSgte;
   
   if(*ptrS == NULL){
      *ptrS2=NULL;
   }
   
  free(ptrTemp);
   

}/*Fin retirar*/


int estaVacia(nodo *ptrS){

   return ptrS==NULL;

}/*Fin estaVacia*/


void borrarCola(nodo **ptrS,nodo **ptrS2){

   nodo *ptrTemp;

   while((*ptrS)!=NULL){
      
      ptrTemp=*ptrS;
      *ptrS=(*ptrS)->ptrSgte;
      free(ptrTemp);
   
   }
   ptrS2=NULL;

}/*Fin borrarCola*/

int longitudc(nodo *ptrActual) {
	
	int n=0;
	
    while (ptrActual != NULL) {  
	++n;
	ptrActual = ptrActual->ptrSgte;

    }
    return n;

}



int buscarc(nodo *ptrActual,char *valor){

   int i=0;

   while((ptrActual!=NULL)&&(strcmp(ptrActual->caracter,valor))){
      ptrActual=ptrActual->ptrSgte;  
      i++;
   }/*Fin while*/
   
   if(ptrActual==NULL){
      i=-1;
   }
   
   return i; 

}


void crearCola(cola *cola)

{

cola->cabeza=cola->talon=NULL;

}


void imprimirListadeColas(lColas *listadecolas){
    
    int i=0;
    cola *auxnodo;
    lColas *actual=listadecolas;
    
    
   
    if(actual==NULL){
   
	printf("Lista vacia\n");
   
    }/*Fin de if*/
    else{  
   
	printf("\nLista de colas \n");
	printf("-------------------");
   
	while(actual!=NULL){
        
	    printf("\n COLA %i \n",i+1);
	    auxnodo=actual->data;
	    imprimirCola(auxnodo->cabeza);
	    actual=actual->sgt;
	 
	    i=i+1;
        
	}/*Fin de while*/
      
	printf("NULL \n");
      
   }/*Fin de else*/
   
 
    
}

